﻿namespace SqueezeboxLib
{
    /// <summary>
    /// Available playlist commands
    /// </summary>
    public enum PlaylistCommand
    {
// ReSharper disable InconsistentNaming
        /// <summary>
        /// Uknown command (not recognized by the Squeezebox CLI
        /// </summary>
        unknown,

        /// <summary>
        /// The "playlist play" command puts the specified song URL, 
        /// playlist or directory contents into the current playlist and plays starting at the first item. 
        /// Any songs previously in the playlist are discarded. 
        /// An optional title value may be passed to set a title. 
        /// This can be useful for remote URLs. The "fadeInSecs" parameter may be passed to specify fade-in period.
        /// </summary>
        play,

        /// <summary>
        /// The "playlist add" command adds the specified song URL, 
        /// playlist or directory contents to the end of the current playlist. 
        /// Songs currently playing or already on the playlist are not affected.
        /// </summary>
        add,

        /// <summary>
        /// The "playlist insert" command inserts the specified song URL, 
        /// playlist or directory contents to be played immediately after the current song in the current playlist.
        /// Any songs currently playing or already on the playlist are not affected.
        /// </summary>
        insert,

        /// <summary>
        /// The "playlist deleteitem" command removes the specified song URL, 
        /// playlist or directory contents from the current playlist.
        /// </summary>
        deleteitem,

        /// <summary>
        /// The "playlist move" command moves the song at the specified index to a new index in the playlist. 
        /// An offset of zero is the first song in the playlist.
        /// </summary>
        move,

        /// <summary>
        /// The "playlist delete" command deletes the song at the specified index from the current playlist.
        /// </summary>
        delete,

        /// <summary>
        /// When called without a cmd param of stop, replace the current playlist with the playlist specified by url,
        /// but save the current playlist to tempplaylist_[playerid].m3u for later retrieval. 
        /// When called with the cmd param of stop, stops the currently playing playlist and loads (if possible) the previous playlist. 
        /// Restored playlist jumps to beginning of CURTRACK when present in m3u file, and does not autoplay restored playlist.
        /// </summary>
        preview,

        /// <summary>
        /// Replace the current playlist with the playlist specified by p2, starting at the song that was playing when the file was saved. (Resuming works only with M3U files saved with the "playlist save" command below.) Shortcut: use a bare playlist name (without leading directories or trailing .m3u suffix) to load a playlist in the saved playlists folder.
        /// </summary>
        resume,

        /// <summary>
        /// Saves a playlist file in the saved playlists directory. Accepts a playlist filename (without .m3u suffix) and saves in the top level of the playlists directory.
        /// </summary>
        save,

        /// <summary>
        /// The "playlist loadalbum" command puts songs matching the specified genre artist and album criteria on the playlist. Songs previously in the playlist are discarded.
        /// </summary>
        loadalbum,

        /// <summary>
        /// The "playlist addalbum" command appends all songs matching the specified criteria onto the end of the playlist. Songs currently playing or already on the playlist are not affected.
        /// </summary>
        addalbum,

        /// <summary>
        /// The "playlist loadtracks" command puts tracks matching the specified query on the playlist. Songs previously in the playlist are discarded. Note: you must provide a particular form to the searchparam (see examples)
        /// </summary>
        loadtracks,

        /// <summary>
        /// The "playlist addtracks" command appends all songs matching the specified criteria onto the end of the playlist. Songs currently playing or already on the playlist are not affected. Note: you must provide a particular form to the searchparam (see examples)
        /// </summary>
        addtracks,

        /// <summary>
        /// The "playlist insertalbum" command inserts all songs matching the specified criteria at the top of the playlist. Songs already on the playlist are not affected.
        /// </summary>
        insertalbum,

        /// <summary>
        /// The "playlist deletealbum" command removes songs matching the specified genre artist and album criteria from the playlist.
        /// </summary>
        deletealbum,

        /// <summary>
        /// The "playlist clear" command removes any song that is on the playlist. The player is stopped.
        /// </summary>
        clear,

        /// <summary>
        /// The "playlist zap" command adds the song at index songindex into the zapped song playlist.
        /// </summary>
        zap,

        /// <summary>
        /// The "playlist playlistsinfo" query returns information on the saved playlist last loaded into the Now Playing playlist, if any.
        /// </summary>
        playlistinfo,

        /// <summary>
        /// The "playlist name" command returns the name of the saved playlist last loaded into the Now Playing playlist, if any.
        /// </summary>
        name,

        /// <summary>
        /// The "playlist url" command returns the URL of the saved playlist last loaded into the Now Playing playlist, if any.
        /// </summary>
        url,

        /// <summary>
        /// The "playlist modified" returns the modification state of the saved playlist last loaded into the Now Playing playlist, if any. If "1", the playlist has been modified since it was loaded.
        /// </summary>
        modified,


        /// <summary>
        /// The "playlist tracks" command returns the the total number of tracks in the current playlist
        /// </summary>
        tracks,

        /// <summary>
        /// The "playlist index" command sets or queries the song that is currently playing by index. When setting, a zero-based value may be used to indicate which song to play. An explicitly positive or negative number may be used to jump to a song relative to the currently playing song. The index can only be set if the playlist is not empty. If an index parameter is set then "fadeInSecs" may be passed to specify fade-in period. The value of the current song index may be obtained by passing in "?" as a parameter.
        /// </summary>
        index,

        genere,
        artist,
        album,
        title,
        path,
        remote,
        duration,

        /// <summary>
        /// The "playlist shuffle" command is used to shuffle, unshuffle or query the shuffle state for the current playlist. A value of "0" indicates that the playlist is not shuffled, "1" indicates that the playlist is shuffled by song, and "2" indicates that the playlist is shuffled by album. Used with no parameter, the command toggles the shuffling state.
        /// </summary>
        shuffle,

        /// <summary>
        /// The "playlist repeat" command is used to indicate or query if the player will stop playing at the end of the playlist, repeat the current song indefinitely, or repeat the current playlist indefinitely. A value of "0" indicates that the player will stop at the end of the playlist, "1" indicates that the player will repeat the current song indefinitely and a value of "2" indicates that the player will repeat the entire playlist indefinitely. Used with no parameter, the command toggles the repeat state.
        /// </summary>
        repeat,

        /// <summary>
        /// The "playlistcontrol" command enables playlist operations using IDs as returned by extended CLI queries (titles, artists, playlists, etc).
        /// </summary>
        playlistcontrol

// ReSharper restore InconsistentNaming
    }
}
